#ifndef ZL_COLLECTION_PAIR
#define ZL_COLLECTION_PAIR

#include "../Basic/Basic.h"

namespace zl
{
	namespace collections
	{
		template<typename K, typename V>
		class Pair
		{
		public:
			K            key;
			V            value;
			Pair()
			{
			}

			Pair(const K& _key, const V& _value) :key(_key), value(_value)
			{
			}

			~Pair()
			{
			}

			Pair(const Pair<K, V>& pair)
			{
				key = pair.key;
				value = pair.value;
			}

			zint CompareTo(const Pair<K, V>& pair)const
			{
				if (key<pair.key)
				{
					return -1;
				}
				else if (key>pair.key)
				{
					return 1;
				}
				else if (value<pair.value)
				{
					return -1;
				}
				else if (value>pair.value)
				{
					return 1;
				}
				else
				{
					return 0;
				}
			}

			bool operator ==(const Pair<K, V>& pair)const
			{
				return CompareTo(pair) == 0;
			}

			bool operator !=(const Pair<K, V>& pair)const
			{
				return CompareTo(pair) != 0;
			}

			bool operator <(const Pair<K, V>& pair)const
			{
				return CompareTo(pair)<0;
			}

			bool operator <=(const Pair<K, V>& pair)const
			{
				return CompareTo(pair) <= 0;
			}

			bool operator >(const Pair<K, V>& pair)const
			{
				return CompareTo(pair)>0;
			}

			bool operator >=(const Pair<K, V>& pair)const
			{
				return CompareTo(pair) >= 0;
			}
		};
	};
};
#endif